﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Configuration.Install;
using System.ComponentModel;
using System.IO;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;
using System.Diagnostics;
using System.Windows.Forms;

namespace UmSoft.SharePoint.Integration
{
    [RunInstaller(true)]
    public class WsInstaller : Installer
    {
        public WsInstaller()
        {
        }

        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            try
            {
                string userName_V8 = Context.Parameters["userName_V8"];
                string password_V8 = Context.Parameters["password_V8"];
                string path_V8 = Context.Parameters["path_V8"];

                string userName_V77 = Context.Parameters["userName_V77"];
                string password_V77 = Context.Parameters["password_V77"];
                string path_V77 = Context.Parameters["path_V77"];

                string assemblypath = Context.Parameters["assemblypath"];
                FileInfo installerPath = new FileInfo(assemblypath);
                FileInfo fi = installerPath.Directory.Parent.GetFiles("web.config")[0];
                string webConfigPath = fi.FullName;

                XmlDocument doc = new XmlDocument();
                doc.Load(webConfigPath);

                XmlNode configuration = null;
                foreach (XmlNode node in doc.ChildNodes)
                {
                    if (node.Name == "configuration")
                    {
                        configuration = node;
                        break;
                    }
                }

                if (configuration != null)
                {
                    XmlNode settingNode = null;
                    foreach (XmlNode node in configuration.ChildNodes)
                    {
                        if (node.Name == "appSettings")
                        {
                            settingNode = node;
                            break;
                        }
                    }

                    if (settingNode != null)
                    {
                        // Очищаем всех его детей
                        settingNode.RemoveAll();

                        // Добавляем новый элемент <add ... /> к строкам соединения
                        XmlElement appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        XmlAttribute attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "userName_V77";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        XmlAttribute attrValue = doc.CreateAttribute("value");
                        attrValue.Value = userName_V77;
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);

                        // Добавляем новый элемент <add ... /> к строкам соединения
                        appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "password_V77";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        attrValue = doc.CreateAttribute("value");
                        attrValue.Value = password_V77;
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);

                        // Добавляем новый элемент <add ... /> к строкам соединения
                        appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "path_V77";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        attrValue = doc.CreateAttribute("value");
                        attrValue.Value = path_V77;
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);

                        // Добавляем новый элемент <add ... /> к строкам соединения
                        appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "userName_V8";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        attrValue = doc.CreateAttribute("value");
                        attrValue.Value = userName_V8;
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);

                        // Добавляем новый элемент <add ... /> к строкам соединения
                        appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "password_V8";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        attrValue = doc.CreateAttribute("value");
                        attrValue.Value = password_V8;
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);

                        // Добавляем новый элемент <add ... /> к строкам соединения
                        appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "path_V8";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        attrValue = doc.CreateAttribute("value");
                        attrValue.Value = path_V8;
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);


                        // Добавляем новый элемент <add ... /> к строкам соединения
                        appSetting = doc.CreateElement("add");
                        // Xml-атрибут для ключа
                        attrKey = doc.CreateAttribute("key");
                        attrKey.Value = "pathApp";
                        appSetting.Attributes.Append(attrKey);
                        // Xml-атрибут для значения
                        attrValue = doc.CreateAttribute("value");
                        attrValue.Value = webConfigPath.Replace("Web.Config", "app.config");
                        appSetting.Attributes.Append(attrValue);
                        settingNode.AppendChild(appSetting);

                        // Save the configuration file
                        doc.Save(webConfigPath);
                    }
                }

                // Вызываем обновление IIS с помощью утилиты aspnet_regiis.exe
                //Process process = new Process();
                //ProcessStartInfo si = new ProcessStartInfo();
                //si.CreateNoWindow = true;
                //si.Arguments = "-i";
                //si.FileName = @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe";
                //si.UseShellExecute = true;
                //process.StartInfo = si;
                //process.Start();
                //process.WaitForExit();


                string xml = "<?xml version='1.0' encoding='utf-8'?> ";
                xml += "<sattings>";
                xml += @"  <report name='ВыгрузкаДанныхПоРеализации' FunctionName_1C='GetReport' path_ERT='M:\1_C_Investafinance\ИнвестаФинансНовая\ExtForms\ВыгрузкаДанныхПоРеализации.ert' path_TEMP_DIR='C:\temp\' />";
                //xml += @"<report name='ВыгрузкаДанныхПоРеализацииБезТоваров' FunctionName_1C='GetReport' path_ERT='C:\1_C_Adg\1_C_Adg\ExtForms\ВыгрузкаДанныхПоРеализацииБезТоваров.ert'  path_TEMP_DIR='C:\temp\' />";
                xml += "</sattings>";

                XmlDocument doc2 = new XmlDocument();
                doc2.LoadXml(xml);
                doc2.Save(webConfigPath.Replace("Web.Config","app.config"));
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
                //this.Rollback(stateSaver);
            }
        }
    }
}

